 LST OFF,NOASYM,NOVSYM,NOGEN
 X65816
 XREFSLOT 6
 SEG $00
*
***********************************************************
*                                                         *
*          PRODOS 8 CLOCK DRIVER INTERFACE ROUTINE        *
*                                                         *
*           COPYRIGHT APPLE COMPUTER, INC., 1983-86       *
*                                                         *
*                    ALL RIGHTS RESERVED                  *
*                                                         *
***********************************************************
*
ProDOS equ 0
EdNet equ 1
os equ ProDOS
*
 ifeq os-ProDOS
 org $d742
 fin
 ifeq os-EdNet
 org $f842
 fin
 SBTL "ProDOS Clock Interface"
***************************************
*    CLOCK - PRODOS INTERFACE ROUTINE
*          BY JAMES R. HUSTON
*     WARNING: HARD CODED FOR SLOT 1
***************************************
 SKP 1
TENS EQU $3A ;NO CONFLICT SINCE MONTH IS LAST PROCESSED. 
MONTH EQU $3A 
WKDAY EQU $3B 
DAY EQU $3C 
HOUR EQU $3D 
MINUTE EQU $3E 
 SKP 1
WTTCP EQU $C10B
RDTCP EQU $C108 ;CLOCK READ ENTRY POINTS.  
CLKMODE EQU $538 ;(+$CN=$5F8+N)
 SKP 1
DATE EQU $BF90 ;PRODOS DATE
TIME EQU $BF92 ;PRODOS TIME.
 SKP 1
INBUF EQU $200 ;INPUT BUFFER.
 SKP 1
READCLK LDX CLKSLT ;PRESERVE CURRENT MODE FOR THUNDERCLOCK
 LDA CLKMODE,X
 PHA
 LDA #$A3 ;SEND NUMERIC MODE BYTE TO THUNDERCLOCK
 JSR WTTCP
CLKSLT EQU *+2
 JSR RDTCP ;READ MONTH, DAY OF WEEK, DAY OF MONTH, AND TIME
 CLC ; INTO INPUT BUFFER.
 LDX #4 ;INDEX FOR 5 VALUES
 LDY #$C ;READ MINUTES FIRST, MONTH LAST.
CONVRT LDA INBUF,Y ;CONVERT VALUES TO BINARY.
 AND #$7 ;NO VALUE > 5 DECIMAL. 
 STA TENS ;MULTIPLY 'TENS' PLACE VALUE. 
 ASL A 
 ASL A 
 ADC TENS ;NOW IT'S TIMES 5.
 ASL A ;NOW IT IS TIMES 10! 
 ADC INBUF+1,Y ;ADD TO ASCII 'ONES' PLACE 
 SEC ;AND SUBTRACT OUT THE ASCII... 
 SBC #$B0 
 SKP 1
CNVRT2 STA MONTH,X ;SAVE CONVERTED VALUE.
 DEY ;INDEX TO NEXT LOWER VALUE.
 DEY
 DEY
 DEX ;ARE THERE MORE VALUES?
 BPL CONVRT ;BRANCH IF THERE ARE.
 TAY ;ACC STILL CONTAINS MONTH, SAVE IN Y FOR NOW. 
 LSR A 
 ROR A
 ROR A
 ROR A ;(HI BIT OF MONTH HELD IN CARRY)
 ORA DAY
 STA DATE ;SAVE LOW VALUE OF DATE.
 PAGE
 PHP ;SAVE HI BIT OF MONTH FOR NOW.
 AND #$1F ;ISOLATE DAY AGAIN.
; (WHEN MONTH >7 CARRY SET ACCOUNTED FOR IN FOLLOWING ADD) 
 ADC TDAYS-1,Y ;REMEMBER THAT Y=MONTH.
 BCC CNVRT3 ;BRANCH NOT SEPT 13 THRU 30.
 ADC #3 ;ADJUST FOR MOD 7 WHEN DAY > 256. 
CNVRT3 SEC
CNVRT4 SBC #7
 BCS CNVRT4 ;LOOP UNTIL LESS THAN 0.
 ADC #7 ;NOW MAKE IT IN THE RANGE OF 0-6. 
 SBC WKDAY ; THE DELTA PROVIDES YEARS OFFSET.
 BCS CNVRT5 ;BRANCH IF POSITIVE.
 ADC #7 ;ELSE MAKE IT POSITIVE AGAIN.
CNVRT5 TAY ;LOOK UP YEAR! 
 LDA YRADJ,Y
 PLP ;LASTLY, COMBINE WITH HI BIT OF MONTH.
 ROL A
 STA DATE+1 ;AND SAVE IT.
 LDA HOUR
 STA TIME+1 ;MOVE HOUR AND MINUTE TO PRODOS GLOBALS.
 LDA MINUTE
 STA TIME
 PLA
 LDX CLKSLT ;RESTORE PREVIOUS MODE.
 STA CLKMODE,X
 RTS ;ALL DONE...
 SKP 2 
TDAYS DFB $0,$1F,$3B,$5A
 DFB $78,$97,$B5,$D3 
 DFB $F2,$14,$33,$51 
 SKP 1
*
*********** See Rev Note #51 ***********
*
yradj dfb 90,89,88,88 ; New year table.
 dfb 87,86,91 ; Good thru 1991.
*YRADJ DFB $54,$54,$53,$52 
* DFB $57,$56,$55 
****************************************
